//namespace ContosoUniversity.Controllers
//{
//    using NRepository.Core;
//    using System;
//    using System.Collections.Generic;
//    using System.Linq;
//    using System.Threading.Tasks;

//    public static class QueryableExtensions
//    {
//        public static async Task<T> FirstOrDefaultAsync<T>(this IQueryable<T> queryable) where T : class
//        {
//            return await Task.Run(() =>
//            {
//                return queryable.FirstOrDefault();
//            });
//        }

//        public static async Task<T> FirstAsync<T>(this IQueryable<T> queryable) where T : class
//        {
//            return await Task.Run(() =>
//            {
//                try
//                {
//                    return queryable.First();
//                }
//                catch (InvalidOperationException ioEx)
//                {
//                    throw new EntityRepositoryException("Zero rows found", ioEx);
//                }
//            });
//        }


//        public static async Task<T> SingleOrDefaultAsync<T>(this IQueryable<T> queryable) where T : class
//        {
//            return await Task.Run(() =>
//            {
//                try
//                {
//                    return queryable.SingleOrDefault();
//                }
//                catch(InvalidOperationException ioEx)
//                {
//                    throw new EntityRepositoryException($"Expected 1 or 0 rows but found {queryable.Count()}", ioEx);
//                }
//            });
//        }


//        public static async Task<T> SingleAsync<T>(this IQueryable<T> queryable) where T : class
//        {
//            return await Task.Run(() =>
//            {
//                try
//                {
//                    return queryable.Single();
//                }
//                catch (InvalidOperationException ioEx)
//                {
//                    throw new EntityRepositoryException($"Expected 1 row but found {queryable.Count()}", ioEx);
//                }
//            });
//        }

//        public static async Task<IEnumerable<T>> AsAsync<T>(this IQueryable<T> queryable) where T : class
//        {
//            return await Task.Run(() =>
//            {
//                return queryable.ToArray();
//            });
//        }
//    }
//}
